home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- typedef unsigned short int16;
- typedef unsigned char u_char;
- #define PTRTYPE u_char
- #define VAL 0xA55A
-
- #define NO_NOS_PARTS
- /*#include "ddlc.h"*/
-
-
- unsigned long BASE = 0xE0000000L;
-
- unsigned int cgetw(addr)
- void far *addr;
- {
- asm les bx,dword ptr addr;
- asm mov al,byte ptr es:[bx+0];
- asm mov ah,byte ptr es:[bx+0x400];
- asm mov ah,byte ptr es:[bx+1];
- }
-
- void cputw(addr,val)
- void far *addr; unsigned int val;
- {
- asm les bx,dword ptr addr;
- asm mov ax,word ptr val;
- asm mov byte ptr es:[bx+0],al;
- asm mov al,byte ptr es:[bx+0x400];
- asm mov byte ptr es:[bx+1],ah;
- }
-
-
- typedef struct ValCnt { unsigned int val; unsigned int cnt; } ValCnt;
- ValCnt valcnt[100];
- int valcntC = 0;
-
- void regValCnt (val)
- unsigned int val;
- {
- int i;
-
- for (i=0;i<valcntC;++i) {
- if (valcnt[i].val == val) {
- valcnt[i].cnt += 1;
- return;
- }
- }
- valcnt[valcntC].val = val;
- valcnt[valcntC].cnt = 1;
- valcntC += 1;
- }
-
- void
- prtValCnt()
- {
- int i;
- for (i=0;i<valcntC;++i)
- printf(" 0x%04X - %4d\n",valcnt[i].val,valcnt[i].cnt);
- }
-
- void
- tester()
- {
- register unsigned int count1;
- unsigned int count2;
- unsigned int maxcount = 10000;
-
- for (count2=maxcount; count2>0; --count2) {
- for (count1=maxcount; count1>0; --count1) {
- (void) cgetw(BASE);
- }
- }
-
- exit(0);
- }
-
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- u_char far *buf;
- int16 far *bufw;
- int16 i, val, failcnt, topcount, fail2cnt;
- volatile int16 far *delay = (int16*)0x20000000L;
-
- if (sizeof(char*) != 4) {
- printf("Sorry, this has not been compiled with LARGE memory model!\n");
- exit(99);
- }
-
- if (argc!=1 && argc != 3) {
- printf("\
- DDLCTEST.EXE: [-s SEG] -- Tests DDLC-card buffer memory and partially chips\n\
- Optional argument defines segment where card resides\n");
- return 1;
- }
- #define htoi(x) strtoul(x,NULL,16)
- if (strcmp(argv[1],"-t")==0) tester();
- if (argc==3)
- BASE = ((unsigned long)htoi(argv[2])) << 16;
-
- topcount = 32000;
- buf = (u_char far *)(BASE+0x0200L);
- bufw = (int16 far *)buf;
-
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *buf = 0;
- *buf = 0xA5;
- *buf = 0x5A;
- val = *buf;
- if (val != 0x5A)
- ++failcnt;
- }
- printf("DDLC SRAM char access (%Fp)\n",buf);
- printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
-
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *buf = 0;
- *buf = 0xA5;
- val = *delay;
- *buf = 0x5A;
- val = *delay;
- val = *buf;
- if (val != 0x5A)
- ++failcnt;
- }
- printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *bufw = 0;
- *bufw = 0xA55A;
- *bufw = 0x5AA5;
- val = *bufw;
- if (val != 0x5AA5)
- ++failcnt;
- }
- printf("DDLC SRAM word access (%Fp)\n",bufw);
- printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
-
- failcnt = 0;
- valcntC = 0;
- for (i=topcount;i>0;--i) {
- *bufw = 0;
- *bufw = 0xA55A;
- val = *delay;
- *bufw = 0x5AA5;
- val = *delay;
- val = *bufw;
- regValCnt(val);
- if (val != 0x5AA5)
- ++failcnt;
- }
- printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
- prtValCnt();
-
- buf = (u_char far *)(BASE+0x02AL);
- bufw = (int16 far *)buf;
-
- printf("DDLC register char access (%Fp)\n",buf);
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *buf = 0;
- *buf = 0xA5;
- *buf = 0x5A;
- val = *buf;
- if (val != 0x5A)
- ++failcnt;
- }
- printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
-
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *buf = 0;
- *buf = 0xA5;
- val = *delay;
- *buf = 0x5A;
- val = *delay;
- val = *buf;
- if (val != 0x5A)
- ++failcnt;
- }
- printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
-
- printf("DDLC register word access (%Fp)\n",bufw);
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *bufw = 0;
- *bufw = 0xA55A;
- *bufw = 0x5AA5;
- val = *bufw;
- if (val != 0x5AA5)
- ++failcnt;
- }
- printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
-
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *bufw = 0;
- *bufw = 0xA55A;
- val = *delay;
- *bufw = 0x5AA5;
- val = *delay;
- val = *bufw;
- if (val != 0x5AA5)
- ++failcnt;
- }
- printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
-
- failcnt=0; valcntC=0;
- for(i=topcount;i>0;--i) {
- cputw(buf,0);
- cputw(buf,0xA55A);
- cputw(buf,0x5AA5);
- val = cgetw(buf);
- regValCnt(val);
- if (val != 0x5AA5)
- ++failcnt;
- }
- printf(" cgetw() failure rate: %d/%d\n",failcnt,topcount);
- prtValCnt();
-
- buf = (u_char far *)(BASE+0x02AL+0x080L);
- bufw = (int16 far *)buf;
-
- printf("DDLC chip 2 register char access (%Fp)\n",buf);
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *buf = 0;
- *buf = 0xA5;
- *buf = 0x5A;
- val = *buf;
- if (val != 0x5A)
- ++failcnt;
- }
- printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
-
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *buf = 0;
- *buf = 0xA5;
- val = *delay;
- *buf = 0x5A;
- val = *delay;
- val = *buf;
- if (val != 0x5A)
- ++failcnt;
- }
- printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
-
- printf("DDLC register word access (%Fp)\n",bufw);
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *bufw = 0;
- *bufw = 0xA55A;
- *bufw = 0x5AA5;
- val = *bufw;
- if (val != 0x5AA5)
- ++failcnt;
- }
- printf("(no wait) failure rate: %d/%d\n",failcnt,topcount);
-
- failcnt = 0;
- for (i=topcount;i>0;--i) {
- *bufw = 0;
- *bufw = 0xA55A;
- val = *delay;
- *bufw = 0x5AA5;
- val = *delay;
- val = *bufw;
- if (val != 0x5AA5)
- ++failcnt;
- }
- printf("(w/ wait) failure rate: %d/%d\n",failcnt,topcount);
-
- failcnt=0; fail2cnt = 0; valcntC = 0;
- for(i=topcount;i>0;--i) {
- cputw(buf,0);
- cputw(buf,0xA55A);
- cputw(buf,0x5AA5);
- val = cgetw(buf);
- if (val != cgetw(buf)) ++fail2cnt;
- if (val != 0x5AA5)
- ++failcnt;
- regValCnt(val);
- }
- printf(" cgetw() failure rate: %d (%d)/%d\n",failcnt,fail2cnt,topcount);
- prtValCnt();
-
- return 0;
- }
-